package com.xadrez.modelo;

import com.xadrez.Principal;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Tabuleiro implements Cloneable {

    // VARIAVEIS ----------------------------------------------------------------------------------------------
    private String status;
    private Peca[][] quadrados;
    public ArrayList<Peca> PecasJogador1, PecasJogador2;

    public Tabuleiro() {
        quadrados = new Peca[8][8];
        PecasJogador1 = new ArrayList<Peca>();
        PecasJogador2 = new ArrayList<Peca>();
    }
    
    // <editor-fold defaultstate="collapsed" desc="ADIÇÃO E REMOÇÃO DE PEÇAS">
    public void add(int num, Peca peca) {
        if (num == 1) {
            PecasJogador1.add(peca);
        } else if (num == 2) {
            PecasJogador2.add(peca);
        }
        //else
        // Propagar um erro
    }

    public void remove(int num, Peca peca) {
        if (num == 1) {
            PecasJogador1.remove(peca);
        } else if (num == 2) {
            PecasJogador2.remove(peca);
        }
        //else
        // propagar um erro
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="MÉTODOS DE BUSCA">
    //Verifica se existe adversário na posição x,y;
    public boolean temAdversarioNaPosicao(int x, int y) {
        boolean tem = false;

        if (x < 8 && y < 8 && x >= 0 && y >= 0) {
            if (quadrados[x][y] != null && !quadrados[x][y].getJogador().equals(Principal.getJogadorDaVez())) {
                tem = true;
            }
        }
        return tem;
    }

    //Verifica se existe peça do jogador humano na posição x,y;
    public boolean temPecaDoJogadorNaPosicao(int x, int y) {
        boolean tem = false;

        if (x < 8 && y < 8 && x >= 0 && y >= 0) {
            if (quadrados[x][y] != null && quadrados[x][y].getJogador().equals(Principal.getJogadorDaVez())) {
                tem = true;
            }
        }
        return tem;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="MÉTODOS GETS e SETS">
    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Peca[][] getQuadrados() {
        return quadrados;
    }

    public void setQuadrados(Peca[][] quadrados) {
        this.quadrados = quadrados;
    }

    public ArrayList<Peca> getPecasJogador(int num) {
        if (num == 1) {
            return PecasJogador1;
        } else if (num == 2) {
            return PecasJogador2;
        } else {
            return null; // impleentar um trows
        }
    }

    public ArrayList<Peca> getPecas(int num) {
        if (num == 1) {
            return PecasJogador1;
        } else if (num == 2) {
            return PecasJogador2;
        } else {
            return null; // propagar um erro depois
        }
    }

    // </editor-fold>
    
    @Override
    public Tabuleiro clone() {
        try {
            return (Tabuleiro) super.clone();
        } catch (CloneNotSupportedException ex) {
            Logger.getLogger(Tabuleiro.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
